// 购物车模块
import store from '@/store'
import { mergeLocalCart, findCartList } from '@/api/cart'
export default {
  namespaced: true,
  state: {
    list: []
  },
  mutations: {
    // 设置购物车列表
    setCartList (state, payload) {
      state.list = payload
    },
    // 控制单个商品的切换
    toggleItem (state, skuId) {
      const goods = state.list.find(item => item.skuId === skuId)
      if (goods) {
        goods.selected = !goods.selected
      }
    },
    // 把商品添加到购物车
    // 添加购物车
    insertCart (state, goods) {
      // 如果同一件商品再次购买，数量累加1即可
      const current = state.list.find(item => item.skuId === goods.skuId)
      if (current) {
        // 再次购买相同的商品
        current.count += 1
      } else {
        // 第一次购买
        state.list.push(goods)
      }
    }
  },
  actions: {
    // 获取购物车列表
    async findCartList (context) {
      const token = store.state.user.profile.token
      if (token) {
        const ret = await findCartList()
        context.commit('setCartList', ret.result)
      }
    },
    // 合并购物车
    async  mergeCart (context) {
      const token = store.state.user.profile.token
      if (token) {
        // 把本地购物车数据提交给后端(获取的是局部数据)
        const goodsList = context.rootGetters['cart/validList'].map(item => ({
          skuId: item.skuId,
          selected: item.selected,
          count: item.count
        }))
        // 调用接口
        await mergeLocalCart(goodsList)
        // 清空本地购物车
        context.commit('setCartList', [])
      }
    },
    // 控制单选切换
    toggleItem (context, skuId) {
      const token = store.state.user.profile.token
      if (token) {
        // 已经登录: TODO
      } else {
        // 没有登录，本地操作
        context.commit('toggleItem', skuId)
      }
    },
    // 加入购物车
    insertCart (context, goods) {
      // 判断登录与否
      const token = store.state.user.profile.token
      if (token) {
        // 已经登录: TODO
      } else {
        // 没有登录，本地操作
        context.commit('insertCart', goods)
      }
    }
  },
  getters: {
    // 有效商品列表
    validList (state) {
      return state.list.filter(item => item.isEffective && item.stock > 0)
    },
    // 计算有效列表的长度
    validCount (state, getters) {
      return getters.validList.reduce((result, item) => result + item.count, 0)
    },
    // 计算失效的商品列表
    invalidList (state) {
      return state.list.filter(item => !item.isEffective)
      // console.log(state.list)
    },
    // 选中商品的列表
    selectedList (state) {
      return state.list.filter(item => item.selected)
    },
    // 计算选中的商品数量
    selectedCount (state, getters) {
      return getters.selectedList.reduce((result, item) => result + item.count, 0)
    },
    // 选中的商品总价
    selectedTotal (state, getters) {
      return getters.selectedList.reduce((result, item) => result + item.nowPrice * item.count, 0)
    }
  }
}
